home *** CD-ROM | disk | FTP | other *** search
/ Your Web Site Creator / Your Web Site Creator.iso / WebSite / data1.cab / Program_Executable_Files / Classes / ACCANVA2.CLA (.txt) next >
Encoding:
Java Class File  |  1999-01-13  |  6.0 KB  |  262 lines

  1. import java.applet.Applet;
  2. import java.awt.Canvas;
  3. import java.awt.Color;
  4. import java.awt.Component;
  5. import java.awt.Dimension;
  6. import java.awt.Graphics;
  7. import java.awt.Image;
  8. import java.awt.image.ImageObserver;
  9. import java.util.Date;
  10.  
  11. public class AnalogClockCanvas2 extends Canvas implements Runnable {
  12.    Image osImage;
  13.    Graphics osg;
  14.    Thread theThread;
  15.    Color clockColor;
  16.    Color hourColor;
  17.    Color minuteColor;
  18.    Color secondColor;
  19.    Color backgroundColor;
  20.    Image clockFace;
  21.    long secondsCount;
  22.    int radius;
  23.    int hours;
  24.    int minutes;
  25.    int seconds;
  26.    long currCount;
  27.    double hourSegmentAngle;
  28.    double minuteSegmentAngle;
  29.    double secondSegmentAngle;
  30.    int hourPosition;
  31.    int minuteOffset;
  32.    int xPos;
  33.    int yPos;
  34.    int widthPos;
  35.    int heightPos;
  36.    Image bkImage;
  37.    int[][] hourPointsX = new int[60][5];
  38.    int[][] hourPointsY = new int[60][5];
  39.    int[][] minutePointsX = new int[60][5];
  40.    int[][] minutePointsY = new int[60][5];
  41.    int[][] secondPointsX = new int[60][5];
  42.    int[][] secondPointsY = new int[60][5];
  43.    static final long secondsPerDay = 86400L;
  44.    static final int secondsPerHour = 3600;
  45.    static final double anglePerHour = 0.10471975511965977;
  46.    static final double anglePerMinute = 0.10471975511965977;
  47.    static final double anglePerSecond = 0.10471975511965977;
  48.    static final double radiansPerDegree = (Math.PI / 180D);
  49.  
  50.    public AnalogClockCanvas2(Applet var1, int var2) {
  51.       Date var3 = new Date();
  52.       this.secondsCount = (long)(var3.getSeconds() + var3.getMinutes() * 60 + var3.getHours() * 3600);
  53.       this.GetParameters(var1, var2);
  54.    }
  55.  
  56.    void GetParameters(Applet var1, int var2) {
  57.       String var3 = var1.getParameter("analogClockColor" + var2);
  58.       this.clockColor = AppletParam2.GetColor(var3, Color.black);
  59.       var3 = var1.getParameter("analogClockHourColor" + var2);
  60.       this.hourColor = AppletParam2.GetColor(var3, Color.black);
  61.       var3 = var1.getParameter("analogClockMinuteColor" + var2);
  62.       this.minuteColor = AppletParam2.GetColor(var3, Color.black);
  63.       var3 = var1.getParameter("analogClockSecondColor" + var2);
  64.       this.secondColor = AppletParam2.GetColor(var3, Color.black);
  65.       var3 = var1.getParameter("analogClockBkColor" + var2);
  66.       this.backgroundColor = AppletParam2.GetColor(var3, (Color)null);
  67.       if (this.backgroundColor != null) {
  68.          ((Component)this).setBackground(this.backgroundColor);
  69.       }
  70.  
  71.       var3 = var1.getParameter("analogClockFace" + var2);
  72.       this.clockFace = var1.getImage(var1.getCodeBase(), var3);
  73.       var3 = var1.getParameter("analogClockHourSegmentAngle" + var2);
  74.       this.hourSegmentAngle = (double)AppletParam2.GetInt(var3, 7) * (Math.PI / 180D);
  75.       var3 = var1.getParameter("analogClockMinuteSegmentAngle" + var2);
  76.       this.minuteSegmentAngle = (double)AppletParam2.GetInt(var3, 7) * (Math.PI / 180D);
  77.       var3 = var1.getParameter("analogClockSecondSegmentAngle" + var2);
  78.       this.secondSegmentAngle = (double)AppletParam2.GetInt(var3, 3) * (Math.PI / 180D);
  79.       var3 = var1.getParameter("analogClockBkImage" + var2);
  80.       this.bkImage = var1.getImage(var1.getCodeBase(), var3);
  81.    }
  82.  
  83.    public void Start() {
  84.       this.theThread = new Thread(this);
  85.       this.theThread.start();
  86.       ((Component)this).repaint();
  87.    }
  88.  
  89.    public void Stop() {
  90.       this.theThread.stop();
  91.       this.theThread = null;
  92.    }
  93.  
  94.    public void update(Graphics var1) {
  95.       if (this.osImage == null) {
  96.          this.osImage = ((Component)this).createImage(this.widthPos, this.heightPos);
  97.          this.osg = this.osImage.getGraphics();
  98.       }
  99.  
  100.       this.osg.setColor(((Component)this).getBackground());
  101.       this.osg.fillRect(0, 0, ((Component)this).size().width, ((Component)this).size().height);
  102.       if (this.bkImage != null) {
  103.          int var2 = this.bkImage.getWidth(this);
  104.          int var3 = this.bkImage.getHeight(this);
  105.          int var4 = ((Component)this).size().width / var2;
  106.          int var5 = ((Component)this).size().height / var3;
  107.          ++var4;
  108.          ++var5;
  109.  
  110.          for(int var6 = 0; var6 < var5; ++var6) {
  111.             for(int var7 = 0; var7 < var4; ++var7) {
  112.                this.osg.drawImage(this.bkImage, var7 * var2, var6 * var3, this);
  113.             }
  114.          }
  115.       }
  116.  
  117.       this.currCount = this.secondsCount;
  118.       this.hours = (int)(this.currCount / 3600L);
  119.       this.currCount -= (long)(this.hours * 3600);
  120.       this.minutes = (int)(this.currCount / 60L);
  121.       this.currCount -= (long)(this.minutes * 60);
  122.       this.seconds = (int)this.currCount;
  123.       if (this.clockFace != null) {
  124.          this.osg.drawImage(this.clockFace, 0, 0, ((Component)this).size().width, ((Component)this).size().height, this);
  125.       } else {
  126.          int var13 = ((Component)this).size().width / 2;
  127.          int var14 = ((Component)this).size().height / 2;
  128.          this.osg.setColor(this.clockColor);
  129.          this.osg.drawOval(0, 0, ((Component)this).size().width - 1, ((Component)this).size().height - 1);
  130.  
  131.          for(int var8 = 0; var8 < 12; ++var8) {
  132.             double var9 = Math.sin((double)var8 * 0.10471975511965977 * (double)5.0F);
  133.             double var11 = Math.cos((double)var8 * 0.10471975511965977 * (double)5.0F);
  134.             int var19 = (int)((double)var13 + (double)this.radius * var9);
  135.             int var20 = (int)((double)var14 - (double)this.radius * var11);
  136.             int var16 = (int)((double)var13 + (double)(this.radius - 4) * var9);
  137.             int var18 = (int)((double)var14 - (double)(this.radius - 4) * var11);
  138.             this.osg.drawLine(var16, var18, var19, var20);
  139.          }
  140.       }
  141.  
  142.       this.osg.setColor(this.secondColor);
  143.       this.osg.fillPolygon(this.secondPointsX[this.seconds], this.secondPointsY[this.seconds], 5);
  144.       this.osg.setColor(this.minuteColor);
  145.       this.osg.fillPolygon(this.minutePointsX[this.minutes], this.minutePointsY[this.minutes], 5);
  146.       this.osg.setColor(this.hourColor);
  147.       this.hourPosition = this.hours % 12 * 5;
  148.       this.minuteOffset = this.minutes / 12;
  149.       this.hourPosition += this.minuteOffset;
  150.       this.osg.fillPolygon(this.hourPointsX[this.hourPosition], this.hourPointsY[this.hourPosition], 5);
  151.       var1.drawImage(this.osImage, 0, 0, (ImageObserver)null);
  152.    }
  153.  
  154.    public void run() {
  155.       while(true) {
  156.          ((Component)this).repaint();
  157.  
  158.          try {
  159.             Thread.sleep(1000L);
  160.             ++this.secondsCount;
  161.             if (this.secondsCount > 86400L) {
  162.                this.secondsCount = 0L;
  163.             }
  164.          } catch (InterruptedException var2) {
  165.             System.out.println(((Throwable)var2).getMessage());
  166.          }
  167.       }
  168.    }
  169.  
  170.    void ComputeHandPolygons() {
  171.       int var5 = this.widthPos / 2;
  172.       int var6 = this.heightPos / 2;
  173.       int var7 = (int)((double)0.5F * (double)this.radius);
  174.       int var8 = var7 / 2;
  175.       int var9 = (int)((double)0.75F * (double)this.radius);
  176.       int var10 = var9 / 2;
  177.       int var11 = (int)(0.9 * (double)this.radius);
  178.       int var12 = var11 / 2;
  179.  
  180.       for(int var13 = 0; var13 < 60; ++var13) {
  181.          double var3 = (double)var13 * 0.10471975511965977;
  182.          this.hourPointsX[var13][0] = var5;
  183.          this.hourPointsY[var13][0] = var6;
  184.          int var1 = (int)((double)var5 + (double)var8 * Math.sin(var3 - this.hourSegmentAngle));
  185.          int var2 = (int)((double)var6 - (double)var8 * Math.cos(var3 - this.hourSegmentAngle));
  186.          this.hourPointsX[var13][1] = var1;
  187.          this.hourPointsY[var13][1] = var2;
  188.          var1 = (int)((double)var5 + (double)var7 * Math.sin(var3));
  189.          var2 = (int)((double)var6 - (double)var7 * Math.cos(var3));
  190.          this.hourPointsX[var13][2] = var1;
  191.          this.hourPointsY[var13][2] = var2;
  192.          var1 = (int)((double)var5 + (double)var8 * Math.sin(var3 + this.hourSegmentAngle));
  193.          var2 = (int)((double)var6 - (double)var8 * Math.cos(var3 + this.hourSegmentAngle));
  194.          this.hourPointsX[var13][3] = var1;
  195.          this.hourPointsY[var13][3] = var2;
  196.          this.hourPointsX[var13][4] = var5;
  197.          this.hourPointsY[var13][4] = var6;
  198.       }
  199.  
  200.       for(int var14 = 0; var14 < 60; ++var14) {
  201.          double var32 = (double)var14 * 0.10471975511965977;
  202.          this.minutePointsX[var14][0] = var5;
  203.          this.minutePointsY[var14][0] = var6;
  204.          int var18 = (int)((double)var5 + (double)var10 * Math.sin(var32 - this.minuteSegmentAngle));
  205.          int var26 = (int)((double)var6 - (double)var10 * Math.cos(var32 - this.minuteSegmentAngle));
  206.          this.minutePointsX[var14][1] = var18;
  207.          this.minutePointsY[var14][1] = var26;
  208.          var18 = (int)((double)var5 + (double)var9 * Math.sin(var32));
  209.          var26 = (int)((double)var6 - (double)var9 * Math.cos(var32));
  210.          this.minutePointsX[var14][2] = var18;
  211.          this.minutePointsY[var14][2] = var26;
  212.          var18 = (int)((double)var5 + (double)var10 * Math.sin(var32 + this.minuteSegmentAngle));
  213.          var26 = (int)((double)var6 - (double)var10 * Math.cos(var32 + this.minuteSegmentAngle));
  214.          this.minutePointsX[var14][3] = var18;
  215.          this.minutePointsY[var14][3] = var26;
  216.          this.minutePointsX[var14][4] = var5;
  217.          this.minutePointsY[var14][4] = var6;
  218.       }
  219.  
  220.       for(int var15 = 0; var15 < 60; ++var15) {
  221.          double var33 = (double)var15 * 0.10471975511965977;
  222.          this.secondPointsX[var15][0] = var5;
  223.          this.secondPointsY[var15][0] = var6;
  224.          int var21 = (int)((double)var5 + (double)var12 * Math.sin(var33 - this.secondSegmentAngle));
  225.          int var29 = (int)((double)var6 - (double)var12 * Math.cos(var33 - this.secondSegmentAngle));
  226.          this.secondPointsX[var15][1] = var21;
  227.          this.secondPointsY[var15][1] = var29;
  228.          var21 = (int)((double)var5 + (double)var11 * Math.sin(var33));
  229.          var29 = (int)((double)var6 - (double)var11 * Math.cos(var33));
  230.          this.secondPointsX[var15][2] = var21;
  231.          this.secondPointsY[var15][2] = var29;
  232.          var21 = (int)((double)var5 + (double)var12 * Math.sin(var33 + this.secondSegmentAngle));
  233.          var29 = (int)((double)var6 - (double)var12 * Math.cos(var33 + this.secondSegmentAngle));
  234.          this.secondPointsX[var15][3] = var21;
  235.          this.secondPointsY[var15][3] = var29;
  236.          this.secondPointsX[var15][4] = var5;
  237.          this.secondPointsY[var15][4] = var6;
  238.       }
  239.  
  240.    }
  241.  
  242.    public synchronized void reshape(int var1, int var2, int var3, int var4) {
  243.       super.reshape(var1, var2, var3, var4);
  244.       this.xPos = var1;
  245.       this.yPos = var2;
  246.       this.widthPos = var3;
  247.       this.heightPos = var4;
  248.       this.radius = var3 / 2;
  249.       this.ComputeHandPolygons();
  250.       this.osImage = null;
  251.       this.osg = null;
  252.    }
  253.  
  254.    public Dimension minimumSize() {
  255.       return new Dimension(10, 10);
  256.    }
  257.  
  258.    public Dimension preferredSize() {
  259.       return new Dimension(10, 10);
  260.    }
  261. }
  262.